From: Keir Fraser Date: Wed, 8 Apr 2009 18:10:33 +0000 (+0100) Subject: restore: sign extend p2m when restoring on a host with pfn width < X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~13988^2~11 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22?a=commitdiff_plain;h=e4eff651ee91d38bd9c37312ca606652f8496af5;p=xen.git restore: sign extend p2m when restoring on a host with pfn width < guest pfn width (i.e. 32on64 domain 0 and 64 bit guest domain). Otherwise P2M entries which were INVALID_P2M_ENTRY (==0xffffffffffffffff) become 0xffffffff after a migrate. Signed-off-by: Ian Campbell --- diff --git a/tools/libxc/xc_domain_restore.c b/tools/libxc/xc_domain_restore.c index 4f92ebb549..32782e1888 100644 --- a/tools/libxc/xc_domain_restore.c +++ b/tools/libxc/xc_domain_restore.c @@ -1197,7 +1197,7 @@ int xc_domain_restore(int xc_handle, int io_fd, uint32_t dom, * we need to adjust the live_p2m assignment appropriately */ if ( guest_width > sizeof (xen_pfn_t) ) for ( i = p2m_size - 1; i >= 0; i-- ) - ((uint64_t *)live_p2m)[i] = p2m[i]; + ((int64_t *)live_p2m)[i] = (long)p2m[i]; else if ( guest_width < sizeof (xen_pfn_t) ) for ( i = 0; i < p2m_size; i++ ) ((uint32_t *)live_p2m)[i] = p2m[i];